package mybatis.interfaces;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 支持排序
 *
 * @author CKC
 */
public interface ISortQueryCondition extends Serializable {

    /**
     * 排序，eg1: sort=-name,-age 表示 按照name的倒叙和age倒叙排序；eg2: sort=-name,age 表示 按照name的倒叙和age升序排序
     *
     */
    @ApiModelProperty(name = "sort", value = "排序，eg1: sort=-name,-age 表示 按照name的倒叙和age倒叙排序；eg2: sort=-name,age 表示 按照name的倒叙和age升序排序")
    List<String> getSort();

    /**
     * setSort
     *
     * @param sort
     * @see #getSort
     */
    void setSort(List<String> sort);

    /**
     * isSorted
     *
     * @return 是否进行排序
     * @see #getSort
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    default boolean isSorted() {
        return getSort() != null && !getSort().isEmpty();
    }


    /**
     * addSort
     *
     * @param sort
     * @see #getSort
     */
    default void addSort(String... sort) {
        if (getSort() == null) {
            setSort(new ArrayList<>());
        }
        getSort().addAll(Arrays.asList(sort));
    }

    /**
     * setSort(null)
     *
     * @see #getSort
     */
    default void clearSort() {
        setSort(null);
    }

    /**
     * isEmptySort
     *
     * @return
     */
    @ApiModelProperty(hidden = true)
    @JsonIgnore
    default boolean isEmptySort() {
        return getSort() == null || getSort().isEmpty();
    }
}
